home *** CD-ROM | disk | FTP | other *** search
/ E.M.Computergraphic Phase 4 / Phase 4 - Desktop Video Dreams (E. M. Computergraphic)(1996).iso / utilities / toolalias / source / window.c < prev    next >
C/C++ Source or Header  |  1996-01-02  |  5KB  |  239 lines

  1. /*
  2.  * help.c
  3.  * 
  4.  * Opens help/settings window and handles events.
  5.  * For ToolAlias.
  6.  * 
  7.  * Martin W. Scott,  4 February 1993
  8.  */
  9. #include <exec/types.h>
  10. #include <libraries/commodities.h>
  11. #include <intuition/intuition.h>
  12. #include <libraries/gadtools.h>
  13. #include <proto/exec.h>
  14. #include <proto/dos.h>
  15. #include <proto/intuition.h>
  16. #include <proto/gadtools.h>
  17. #include <proto/graphics.h>
  18. #include <proto/commodities.h>
  19. #include <string.h>
  20.  
  21. #include "toolalias_gfx.c"    /* NB!!! compile with NO MULTI-INCLUDES */
  22. #include "file.h"
  23. #include "list.h"
  24. #include "window.h"
  25.  
  26. extern char popstr[];        /* popup-key */
  27. extern ULONG wndsigflag;    /* signal for IDCMP */
  28. static TOOL *curtool = (APTR)(-1L);    /* currently shown tool */
  29. static const char *emptystr = "";
  30.  
  31. /* initialise individual gadget */
  32. static void
  33. InitGadget(UWORD num, LONG tagtype, LONG tagvalue)
  34. {
  35.     GT_SetGadgetAttrs(ToolAliasGadgets[num], ToolAliasWnd, NULL, tagtype, tagvalue, TAG_DONE);
  36. }
  37.  
  38. static void
  39. ToggleStates(BOOL how)
  40. {
  41.     UWORD i;
  42.  
  43.     /* Notez Bien: this depends on the order of the gadget numbers */
  44.     for (i = GDX_OldStr; i < GDX_SaveBut; i++)
  45.         if (i != GDX_AddBut)
  46.             InitGadget(i, GA_Disabled, how);
  47. }
  48.  
  49. /* initialise all gadgets */
  50. static void
  51. UpdateGadgets()
  52. {
  53.     static BOOL disabled;
  54.  
  55.     if (curtool)    /* list isn't empty */
  56.     {
  57.         if (disabled)
  58.             ToggleStates(disabled = FALSE);
  59.  
  60.         InitGadget(GDX_OldStr, GTST_String, curtool->oldname ? (LONG)curtool->oldname : (LONG)emptystr);
  61.         InitGadget(GDX_NewStr, GTST_String, curtool->newname ? (LONG)curtool->newname : (LONG)emptystr);
  62.     }
  63.     else if (!disabled)
  64.     {
  65.         InitGadget(GDX_OldStr, GTST_String, (LONG)emptystr);
  66.         InitGadget(GDX_NewStr, GTST_String, (LONG)emptystr);
  67.         ToggleStates(disabled = TRUE);
  68.     }
  69. }
  70.  
  71. /* show our help window */
  72. BOOL
  73. ShowWindow()
  74. {
  75.     static char    title[80];
  76.  
  77.     if (curtool == (APTR)(-1L))
  78.         curtool = get_head();
  79.  
  80.     WBenchToFront();
  81.     if (ToolAliasWnd)        /* already open... */
  82.     {
  83.         WindowToFront(ToolAliasWnd);
  84.         return TRUE;
  85.     }
  86.  
  87.     if (SetupScreen())    /* try to get lock on WB */
  88.         return FALSE;
  89.  
  90.     strcpy(title, "HotKey=<");
  91.     strcat(title, popstr);
  92.     strcat(title, ">");
  93.     ToolAliasWdt = title;
  94.  
  95.     if (!OpenToolAliasWindow())    /* like the name says... */
  96.     {
  97.         UpdateGadgets();
  98.         wndsigflag = 1 << ToolAliasWnd->UserPort->mp_SigBit;
  99.         return TRUE;
  100.     }
  101.     CloseDownScreen();
  102.     return FALSE;
  103. }
  104.  
  105. /* hide our ToolAlias window */
  106. void
  107. HideWindow()
  108. {
  109.     if (ToolAliasWnd)
  110.     {
  111.         CloseToolAliasWindow();
  112.         CloseDownScreen();
  113.         wndsigflag = NULL;
  114.         ToolAliasWnd = NULL;
  115.     }
  116. }
  117.  
  118. /* extract from string-gadget */
  119. #define GadString(gadget)    ((struct StringInfo *)(gadget)->SpecialInfo)->Buffer
  120.  
  121. /* handle window events */
  122. LONG
  123. HandleIDCMP()
  124. {
  125.     struct IntuiMessage *msg;
  126.     struct Gadget   *gadget;
  127.     ULONG           class;
  128.  
  129.     while (msg = GT_GetIMsg(ToolAliasWnd->UserPort))
  130.     {
  131.         class = msg->Class;
  132.         gadget = (struct Gadget *)msg->IAddress;
  133.         GT_ReplyIMsg(msg);
  134.  
  135.         switch (class)
  136.         {
  137.         case CLOSEWINDOW:
  138.             HideWindow();
  139.             return GUI_OKAY;
  140.  
  141.         case GADGETUP:
  142.             switch (gadget->GadgetID)
  143.             {
  144.             case GD_OldStr:
  145.                 if (!set_oldname(curtool, GadString(gadget)))
  146.                     return GUI_ABEND;
  147.                 ActivateGadget(ToolAliasGadgets[GDX_NewStr], ToolAliasWnd, NULL);
  148.                 break;
  149.  
  150.             case GD_NewStr:
  151.                 if (!set_newname(curtool, GadString(gadget)))
  152.                     return GUI_ABEND;
  153.                 break;
  154.  
  155.             case GD_StartBut:
  156.                 curtool = get_head();
  157.                 UpdateGadgets();
  158.                 break;
  159.  
  160.             case GD_PrevBut:
  161.                 if (curtool && curtool->prev)
  162.                 {
  163.                     curtool = curtool->prev;
  164.                     UpdateGadgets();
  165.                 }
  166.                 else DisplayBeep(NULL);
  167.                 break;
  168.  
  169.             case GD_AddBut:
  170.                 if (curtool = add_tool(curtool))
  171.                 {
  172.                     UpdateGadgets();
  173.                     ActivateGadget(ToolAliasGadgets[GDX_OldStr], ToolAliasWnd, NULL);
  174.                 }
  175.                 else
  176.                     return GUI_ABEND;
  177.                 break;
  178.  
  179.             case GD_NextBut:
  180.                 if (curtool && curtool->next)
  181.                 {
  182.                     curtool = curtool->next;
  183.                     UpdateGadgets();
  184.                 }
  185.                 else DisplayBeep(NULL);
  186.                 break;
  187.  
  188.             case GD_EndBut:
  189.                 curtool = get_tail();
  190.                 UpdateGadgets();
  191.                 break;
  192.  
  193.             case GD_DelBut:
  194.                 if (curtool)
  195.                     curtool = rem_tool(curtool);
  196.                 UpdateGadgets();
  197.                 break;
  198.  
  199.             case GD_SaveBut:
  200.                 if (write_config(DEF_CONFIG))
  201.                 {
  202.                     HideWindow();
  203.                     return GUI_OKAY;
  204.                 }
  205.                 break;
  206.  
  207.             case GD_LoadBut:
  208.                 if (get_config(DEF_CONFIG))    /* could fail */
  209.                 {
  210.                     curtool = get_head();
  211.                     UpdateGadgets();
  212.                 }
  213.                 else return GUI_ABEND;
  214.                 break;
  215.  
  216.             case GD_UseBut:
  217.                 HideWindow();
  218.                 return GUI_OKAY;
  219.  
  220.             case GD_QuitBut:
  221.                 HideWindow();
  222.                 return GUI_QUIT;
  223.  
  224.             } /* switch (gadget->GadgetID) */
  225.             break;
  226.  
  227.         case REFRESHWINDOW:
  228.             GT_BeginRefresh(ToolAliasWnd);
  229. /*            ToolAliasRender();*/
  230.             GT_EndRefresh(ToolAliasWnd, TRUE);
  231.             break;
  232.  
  233.         } /* switch (class) */
  234.  
  235.     } /* while more messages */
  236.  
  237.     return GUI_OKAY;
  238. }
  239.